home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Online / opennap / opennap.h < prev    next >
C/C++ Source or Header  |  2001-06-08  |  38KB  |  1,155 lines

  1. /* Copyright (C) 2000 drscholl@users.sourceforge.net
  2.    This is free software distributed under the terms of the
  3.    GNU Public License.  See the file COPYING for details.
  4.  
  5.    $Id: opennap.h,v 1.293 2001/03/03 01:00:06 drscholl Exp $ */
  6.  
  7. /* Modified 31/05/01 : Added include "confdefs.h" to ensure WORDS_BIGENDIAN is
  8.       for Amiga port : defined correctly
  9. */
  10.  
  11. #include "confdefs.h"
  12.  
  13. #ifndef opennap_h
  14. #define opennap_h
  15.  
  16. #if defined(WIN32) && !defined(__CYGWIN__)
  17. #include <windows.h>
  18. /* the next two #defines are needed for zlib */
  19. #define _WINDOWS
  20. #define ZLIB_DLL
  21. #include "zlib.h"
  22. #endif
  23.  
  24. #if HAVE_POLL
  25. #include <sys/poll.h>
  26. #endif
  27.  
  28. #include <stdarg.h>
  29. #include <sys/types.h>
  30. #include <zlib.h>
  31. #include "hash.h"
  32. #include "list.h"
  33.  
  34. #define OUTOFMEMORY(f) log("%s: OUT OF MEMORY at %s:%d", f, __FILE__, __LINE__)
  35. #define _logerr(f,s,e) log("%s: %s: %s (errno %d)", f, s, strerror(e), e)
  36. #define logerr(f,s) _logerr(f,s,errno)
  37.  
  38. #define MAGIC_USER 0xeaee402a
  39. #define MAGIC_CHANNEL 0xa66544cb
  40. #define MAGIC_CONNECTION 0x3c4474a3
  41. #define MAGIC_BUFFER 0xe5a7a3be
  42. #define MAGIC_CHANUSER 0x728dc736
  43. #define MAGIC_OPS 0xa28e453f
  44. #define MAGIC_FLIST 0xff496a95
  45.  
  46. #if WORDS_BIGENDIAN
  47. /* convert the bytes of a 16-bit integer to little endian */
  48. #define BSWAP16(c) (((((c) & 0xff) << 8) | (((c) >> 8) & 0xff)))
  49. /* convert the bytes of a 32-bit integer to little endian */
  50. #define BSWAP32(c) ((((c)>>24)&0xff)|(((c)>>8)&0xff00)|(((c)<<8)&0xff0000)|((c)<<24))
  51. #else
  52. #define BSWAP16(c) c
  53. #define BSWAP32(c) c/
  54. #endif
  55.  
  56. #define ISSPACE(c) isspace((unsigned char)(c))
  57. #define ISPRINT(c) isprint((unsigned char)(c))
  58.  
  59. #define FIELDS(p) sizeof(p)/sizeof(char*)
  60.  
  61.  
  62. typedef struct _buffer BUFFER;
  63.  
  64. /* to avoid copying a lot of data around with memmove() we use the following
  65.    structure for output buffers */
  66. struct _buffer
  67. {
  68. #if DEBUG
  69.     unsigned int magic;
  70. #endif
  71.     char   *data;               /* allocated data */
  72.     int     datasize;           /* total bytes used in `data' */
  73.     int     datamax;            /* size of allocated memory block */
  74.     int     consumed;           /* how many bytes of data consumed from this buffer */
  75.     BUFFER *next;
  76. };
  77.  
  78. #define BUFFER_SIZE 4096        /* default buffer length for output queues */
  79.  
  80. typedef struct _connection CONNECTION;
  81. typedef struct _user USER;
  82. typedef struct _channel CHANNEL;
  83. typedef struct _chanuser CHANUSER;
  84. typedef struct _class CLASS;
  85.  
  86. /* bitmasks for the `flags' member of struct _chanuser */
  87. #define ON_CHANNEL_OPERATOR     1
  88. #define ON_CHANNEL_VOICE        (1<<1)
  89. #define ON_CHANNEL_MUZZLED      (1<<2)
  90.  
  91. struct _chanuser
  92. {
  93. #ifdef DEBUG
  94.     unsigned int magic;
  95. #endif
  96.     int     flags;
  97.     USER   *user;
  98. };
  99.  
  100. /* bitmask values for the channel flags */
  101. #define ON_CHANNEL_REGISTERED   (1<<0)  /* channel is registered */
  102. #define ON_CHANNEL_PRIVATE      (1<<1)  /* private (hidden) channel */
  103. #define ON_CHANNEL_MODERATED    (1<<2)  /* moderated channel */
  104. #define ON_CHANNEL_INVITE       (1<<3)  /* invitation required */
  105. #define ON_CHANNEL_TOPIC        (1<<4)  /* topic can be set by any member */
  106. #define ON_CHANNEL_QUIET        (1<<5)  /* quiet channel */
  107.  
  108. struct _channel
  109. {
  110. #ifdef DEBUG
  111.     unsigned int magic;
  112. #endif
  113.     char   *name;               /* name of the channel */
  114.     char   *topic;              /* current topic of discussion */
  115.     LIST   *users;              /* list of users on the channel */
  116.     LIST   *bans;               /* channel specific bans */
  117.     LIST   *invited;            /* invited users */
  118.     time_t  timestamp;          /* when channel was created, used to sync servers */
  119.     unsigned short limit;       /* max number of users allowed */
  120.     unsigned int flags:12;      /* channel flags */
  121.     unsigned int level:3;       /* minimum level to enter channel */
  122.     unsigned int local:1;       /* channel is local to server */
  123. };
  124.  
  125. /* user level */
  126. enum
  127. {
  128.     LEVEL_LEECH,
  129.     LEVEL_USER,
  130.     LEVEL_MODERATOR,
  131.     LEVEL_ADMIN,
  132.     LEVEL_ELITE
  133. };
  134.  
  135. /* connection class */
  136. struct _class
  137. {
  138.     unsigned int target;
  139.     unsigned int mask;
  140.     int     limit;
  141. };
  142.  
  143. struct _user
  144. {
  145. #ifdef DEBUG
  146.     unsigned int magic;
  147. #endif
  148.     char   *nick;
  149.     char   *pass;               /* password for this user, needed for sync */
  150.     char   *clientinfo;         /* DO NOT FREE.  This is a ref to
  151.                                    an entry in the Client_Versions hash
  152.                                    table */
  153.     char   *server;             /* which server the user is connected to.
  154.                                    NOTE. this is a pointer to an entry in
  155.                                    Server_Names, and not malloc'd. */
  156.  
  157.     unsigned short uploads;     /* no. of uploads in progress */
  158.     unsigned short downloads;   /* no. of downloads in progress */
  159.  
  160.     unsigned int level:3;       /* user level */
  161.     unsigned int speed:4;       /* link speed */
  162.     unsigned int local:1;       /* nonzero if locally connected */
  163.     unsigned int muzzled:1;     /* non-zero if this user is muzzled */
  164.     unsigned int sharing:1;
  165.     unsigned int unsharing:1;
  166.     unsigned int cloaked:1;
  167.     unsigned int xxx:4;         /* unused */
  168.     unsigned short shared;      /* # of shared files */
  169.  
  170.     unsigned short totalup;     /* total number of uploads */
  171.     unsigned short totaldown;   /* total number of downloads */
  172.  
  173.     unsigned int libsize;       /* approximate size of shared files in kB */
  174.     unsigned int ip;            /* ip of user in network byte order */
  175.  
  176.     unsigned short port;        /* data port client is listening on */
  177.     unsigned short conport;     /* remote port for connection to server */
  178.     time_t  connected;          /* time at which the user connected */
  179.     LIST   *channels;           /* channels of which this user is a member */
  180.     CONNECTION *con;            /* local connection, or server which this
  181.                                    user is behind */
  182. };
  183.  
  184. enum
  185. {
  186.     CLASS_UNKNOWN,
  187.     CLASS_USER,
  188.     CLASS_SERVER
  189. };
  190.  
  191. #define ISSERVER(c)     ((c)->class==CLASS_SERVER)
  192. #define ISUSER(c)       ((c)->class == CLASS_USER)
  193. #define ISUNKNOWN(c)    ((c)->class==CLASS_UNKNOWN)
  194.  
  195. typedef struct
  196. {
  197.     z_streamp zin;              /* input stream decompressor */
  198.     z_streamp zout;             /* output stream compressor */
  199.     BUFFER *outbuf;             /* compressed output buffer */
  200. }
  201. SERVER;
  202.  
  203. typedef struct
  204. {
  205.     char   *nonce;
  206.     char   *sendernonce;
  207. }
  208. AUTH;
  209.  
  210. /* this struct contains options on a per user basis.  They are not included
  211.    in the USER struct since they only apply to local connections */
  212. typedef struct
  213. {
  214.     /* bitmask of which server messages a user wishes to receive */
  215.     unsigned int usermode;
  216.     /* hotlist for user.  this is the list of users they wish to be
  217.        notified about when they log in or out.  note that this is just
  218.        a pointer to the _single_ global entry stored in the Hotlist
  219.        hash table.  the actual HOTLIST* pointer should only be freed
  220.        when hotlist->numusers is zero.  */
  221.     LIST   *hotlist;
  222.     HASH   *files;              /* db entries for this user's shared files */
  223.     LIST   *ignore;             /* server side ignore list */
  224.     int     searches;           /* number of pending searches */
  225. }
  226. USEROPT;
  227.  
  228. struct _connection
  229. {
  230. #ifdef DEBUG
  231.     unsigned int magic;
  232. #endif
  233.     int     id;                 /* index into the Clients[] and Poll[] array */
  234.     int     fd;                 /* socket for this connection */
  235.     unsigned int ip;            /* ip for this connection */
  236.     char   *host;               /* host from which this connection originates */
  237.     USER   *user;               /* pointer to the user associated with this
  238.                                    connection, if CLASS_USER */
  239.     BUFFER *sendbuf;            /* output buffer */
  240.     BUFFER *recvbuf;            /* input buffer */
  241.  
  242.     union
  243.     {
  244.         /* parameters for use when the connection is a server.  items which
  245.            only apply to users on the local server are placed here in order
  246.            to reduce memory consumption */
  247. #define uopt opt.useropt
  248.         USEROPT *useropt;
  249.         /* parameters for server->server connection */
  250. #define sopt opt.server
  251.         SERVER *server;
  252.         /* this field is used for the authentication phase of server links */
  253.         AUTH   *auth;
  254.     }
  255.     opt;
  256.  
  257.     time_t  timer;              /* timer to detect idle connections */
  258.     time_t  flood_start;        /* flood protection counter */
  259.  
  260.     unsigned short flood_commands;
  261.     unsigned short port;        /* remote port */
  262.  
  263.     unsigned short unused;
  264.  
  265.     unsigned int connecting:1;
  266.     unsigned int destroy:1;     /* connection should be destoyed in
  267.                                    handle_connection().  because h_c() caches
  268.                                    a copy of the CONNECTION pointer, we can't
  269.                                    remove it from inside a handler, so we mark
  270.                                    it here and have it removed at a later time 
  271.                                    when it is safe */
  272.     unsigned int killed:1;      /* set when the user was killed so free_user()
  273.                                    knows not to generate a QUIT message */
  274.     unsigned int quit:1;        /* used to detect manual server disconnects */
  275.     unsigned int server_login:1;
  276.     unsigned int compress:4;    /* compression level for this connection */
  277.     unsigned int class:2;       /* connection class (unknown, user, server) */
  278.     unsigned int numerics:1;    /* use real numerics for opennap extensions */
  279.     unsigned int xxx:4;         /*unused */
  280.  
  281. };
  282.  
  283. /* list of DATUM entries, used in the global file list */
  284. typedef struct
  285. {
  286. #if DEBUG
  287.     unsigned int magic;
  288. #endif
  289.     char   *key;                /* keyword */
  290.     LIST   *list;               /* list of files containing this keyword */
  291.     int     count;              /* number of files in the list */
  292. }
  293. FLIST;
  294.  
  295. /* content-type */
  296. enum
  297. {
  298.     CT_MP3,                     /* default */
  299.     CT_AUDIO,
  300.     CT_VIDEO,
  301.     CT_APPLICATION,
  302.     CT_IMAGE,
  303.     CT_TEXT,
  304.     CT_UNKNOWN
  305. };
  306.  
  307. typedef struct
  308. {
  309.     USER   *user;               /* user who possesses this file */
  310.     char   *filename;
  311. #if RESUME
  312.     char   *hash;               /* the md5 hash of the file */
  313. #endif
  314.     LIST   *tokens;             /* list of keywords for this file */
  315.     unsigned int size;          /* size of file in bytes.  set to -1 if
  316.                                    the structure is invalid */
  317.     unsigned short duration;
  318.     /* next 4 fields make up 16 bits */
  319.     unsigned int bitrate:5;     /* offset into BitRate[] */
  320.     unsigned int frequency:3;   /* offset into SampleRate[] */
  321.     unsigned int type:3;        /* content type */
  322.     unsigned int xxx:5;         /* unused */
  323. }
  324. DATUM;
  325.  
  326. typedef struct _ban
  327. {
  328.     char   *target;             /* target of the ban */
  329.     char   *setby;              /* user/server that set the ban */
  330.     char   *reason;             /* reason for the ban */
  331.     time_t  when;               /* when the ban was set */
  332.     int     timeout;            /* how many secs the ban is active for */
  333. }
  334. BAN;
  335.  
  336. /* bitmask for use in USERDB .flags member */
  337. #define ON_MUZZLED 0x0001
  338.  
  339. /* 20 (+4) bytes */
  340. typedef struct
  341. {
  342.     char   *nick;
  343.     char   *password;
  344. #if EMAIL
  345.     char   *email;
  346. #endif
  347.     unsigned short level;
  348.     unsigned short flags;
  349.     time_t  created;            /* when the record was created */
  350.     time_t  lastSeen;
  351. }
  352. USERDB;
  353.  
  354. typedef struct link
  355. {
  356.     char   *server;
  357.     char   *peer;
  358.     unsigned short port;
  359.     unsigned short peerport;
  360.     int     hops;
  361. }
  362. LINK;
  363.  
  364. /* structure to hold the server-link authentications */
  365.  
  366. typedef struct
  367. {
  368.     char   *name;
  369.     char   *alias;              /* name which will be displayed (optional) */
  370.     int     port;               /* port to connect to */
  371.     char   *their_pass;
  372.     char   *my_pass;
  373. }
  374. server_auth_t;
  375.  
  376. /* who-was entry */
  377. typedef struct
  378. {
  379.     char   *nick;
  380.     char   *server;
  381.     unsigned int ip;            /* client's ip address */
  382.     time_t  when;               /* when the user logged out */
  383.     char   *clientinfo;         /* client version string */
  384. }
  385. whowas_t;
  386.  
  387. /* information per ip address to help curb abuse of reconnecting to fast
  388.  * or registering a lot of nicknames.
  389.  */
  390. typedef struct
  391. {
  392.     unsigned int ip;            /* ip address */
  393.     time_t  last_connect;       /* time at which last connect occurred */
  394.     time_t  last_register;      /* time at which last was registered */
  395.     unsigned int users;         /* current number of users from this ip */
  396.     unsigned int connects;      /* total number of connects from this ip */
  397. }
  398. ip_info_t;
  399.  
  400. typedef struct
  401. {
  402.     unsigned int ip;
  403.     unsigned int mask;
  404.     unsigned count;
  405. }
  406. access_t;
  407.  
  408. /* bitmask used for new_tcp_socket() call */
  409. #define ON_NONBLOCKING  1
  410. #define ON_REUSEADDR    2
  411. #define ON_LISTEN       4
  412.  
  413. typedef void (*timer_cb_t) (void *);
  414.  
  415. /* define a namespace for global variables */
  416. typedef struct
  417. {
  418. #if HAVE_POLL
  419.     struct pollfd *poll;
  420.     int     poll_num;
  421.     int     poll_max;
  422.     int    *fdmap;
  423. #else
  424.     fd_set  read_fds;
  425.     fd_set  write_fds;
  426. #endif
  427.     int     max_fd;
  428.  
  429.     CONNECTION **clients;
  430.     int     clients_num;
  431.     int     clients_max;
  432.  
  433.     double  bytes_in;
  434.     double  bytes_out;
  435.     double  total_bytes_in;
  436.     double  total_bytes_out;
  437.  
  438.     time_t  current_time;
  439.     time_t  last_click;
  440.     int     min_read;
  441.     int     stat_click;
  442.     int     search_count;
  443. #ifndef ROUTING_ONLY
  444.     int     stat_server_fd;
  445.     char   *stat_pass;
  446.     char   *stat_server;
  447.     int     stat_server_port;
  448.     char   *stat_user;
  449.     char   *report_ip;
  450.     int     report_port;
  451.     char   *report_name;
  452. #endif
  453. }
  454. global_t;
  455.  
  456. extern global_t global;
  457.  
  458. #ifndef ROUTING_ONLY
  459. extern int File_Count_Threshold;
  460. extern HASH *File_Table;
  461. extern HASH *Filter;
  462. extern int Local_Files;
  463. extern int Max_Search_Results;
  464. extern int Max_Shared;
  465.  
  466. #if RESUME
  467. extern HASH *MD5;
  468. #endif
  469. extern int Stats_Port;
  470. #endif
  471.  
  472. extern HASH *Channel_Db;
  473. extern int Client_Queue_Length;
  474. extern HASH *Client_Versions;
  475. extern HASH *Clones;
  476. extern int Compression_Level;
  477. extern char *Config_Dir;
  478. extern unsigned int Connection_Count;
  479. extern int Flood_Commands;
  480. extern int Flood_Time;
  481. extern LIST *Flooders;
  482. extern unsigned int Interface;
  483. extern char *Listen_Addr;
  484. extern int Login_Interval;
  485. extern int Login_Timeout;
  486. extern int Max_Browse_Result;
  487. extern int Max_Command_Length;
  488. extern int Max_Connections;
  489. extern int Max_Nick_Length;
  490. extern int Max_Searches;
  491. extern int Max_Time_Delta;
  492. extern int Max_User_Channels;   /* # of channels is a user allowed to join */
  493. extern LIST *Mods;
  494. extern int Nick_Expire;
  495. extern int Ping_Interval;
  496. extern int Register_Interval;
  497. extern char *Server_Alias;
  498. extern int Search_Timeout;
  499. extern int Server_Chunk;
  500. extern unsigned int Server_Flags;
  501. extern unsigned int Server_Ip;
  502. extern char *Server_Name;
  503. extern LIST *Server_Names;
  504. extern LIST *Server_Ports;
  505. extern LIST *Server_Auth;       /* link auth info */
  506. extern int Server_Queue_Length;
  507. extern int SigCaught;           /* flag to control main loop */
  508. extern time_t Server_Start;
  509. extern int User_Db_Interval;
  510. extern int Max_Channel_Length;
  511. extern int Max_Clones;
  512. extern int Max_Ignore;
  513. extern int Max_Hotlist;
  514. extern int Max_Topic;
  515. extern int Max_Client_String;
  516. extern int Max_Reason;
  517. extern int Num_Files;           /* total number of available files */
  518. extern double Num_Gigs;         /* total size of files available (in kB) */
  519. extern unsigned int Pending_Searches;
  520. extern int Warn_Time_Delta;
  521. extern HASH *Who_Was;
  522. extern int Who_Was_Time;
  523. extern unsigned int UserMode_int;       /* Default UserMode to use when mod logs in */
  524. extern char *UserMode;
  525.  
  526. extern const int BitRate[];
  527. extern const int SampleRate[];
  528.  
  529. #ifndef WIN32
  530. extern int Uid;
  531. extern int Gid;
  532. extern int Connection_Hard_Limit;
  533. extern int Max_Data_Size;
  534. extern int Max_Rss_Size;
  535. #endif
  536.  
  537. #define option(x) ((Server_Flags & (x))!=0)
  538.  
  539. #define ON_STRICT_CHANNELS      1       /* only mods+ can create channels */
  540. #define ON_REGISTERED_ONLY      (1<<1)  /* only registered users are allowed */
  541. #define ON_AUTO_REGISTER        (1<<2)  /* automatically register users */
  542. #define ON_LOCK_MEMORY          (1<<3)  /* prevent process from being swapped */
  543. #define ON_NO_LISTEN            (1<<4)  /* don't listen on port 8889 */
  544. #define ON_BACKGROUND           (1<<5)  /* run in daemon mode */
  545. #define ON_EJECT_WHEN_FULL      (1<<6)  /* eject nonsharing clients when full */
  546. #define ON_IRC_CHANNELS         (1<<7)  /* irc-style channels */
  547. #define ON_LOGLEVEL_CHANGE      (1<<8)  /* log level changes to clients */
  548. #define ON_REMOTE_BROWSE        (1<<9)  /* allow server->server browsing */
  549. #define ON_AUTO_LINK            (1<<10) /* auto-link servers */
  550. #define ON_GHOST_KILL           (1<<11) /* enable auto ghost kill */
  551. #define ON_ALLOW_SHARE          (1<<12) /* allow file sharing */
  552. #define ON_RESTRICT_REGISTRATION        (1<<13) /* don't allow auto nick reg. */
  553.  
  554. extern char Buf[2048];
  555.  
  556. extern LIST *Bans;
  557. extern LIST *Servers;           /* peer servers */
  558. extern LIST *Server_Links;
  559. extern LIST *UserClass;
  560.  
  561. extern HASH *Users;
  562. extern HASH *Channels;
  563. extern HASH *Hotlist;
  564. extern HASH *User_Db;
  565.  
  566. extern char *Levels[LEVEL_ELITE + 1];
  567. extern char *Content_Types[CT_UNKNOWN];
  568.  
  569. #define set_tag(b,n) set_val(b+2,n)
  570. #define set_len set_val
  571. void    set_val (char *d, unsigned short val);
  572.  
  573. /* message types */
  574. /* MSG_CLIENT_* are messages sent by the client to the server
  575.    MSG_SERVER_* are messages sent by the server to the client
  576.  
  577.    note that in some cases CLIENT messages are sent to peer servers
  578.    by the receiving server */
  579.  
  580. #define MSG_SERVER_ERROR                0
  581. #define MSG_CLIENT_LOGIN                2
  582. #define MSG_SERVER_EMAIL                3
  583. #define MSG_CLIENT_VERSION_CHECK        4
  584. #define MSG_CLIENT_LOGIN_REGISTER       6
  585. #define MSG_CLIENT_REGISTER             7
  586. #define MSG_SERVER_REGISTER_OK          8
  587. #define MSG_SERVER_REGISTER_FAIL        9
  588. #define MSG_SERVER_BAD_NICK             10
  589. #define MSG_CLIENT_CHECK_PASS           11
  590. #define MSG_SERVER_PASS_OK              12
  591. #define MSG_SERVER_ECHO                 13
  592. #define MSG_CLIENT_REGISTRATION_INFO    14
  593. #define MSG_CLIENT_ADD_FILE             100
  594. #define MSG_CLIENT_REMOVE_FILE          102
  595. #define MSG_CLIENT_UNSHARE_ALL          110
  596. #define MSG_CLIENT_SEARCH               200
  597. #define MSG_SERVER_SEARCH_RESULT        201
  598. #define MSG_SERVER_SEARCH_END           202
  599. #define MSG_CLIENT_DOWNLOAD             203
  600. #define MSG_SERVER_FILE_READY           204
  601. #define MSG_CLIENT_PRIVMSG              205
  602. #define MSG_SERVER_SEND_ERROR           206
  603. #define MSG_CLIENT_ADD_HOTLIST          207
  604. #define MSG_CLIENT_ADD_HOTLIST_SEQ      208
  605. #define MSG_SERVER_USER_SIGNON          209
  606. #define MSG_SERVER_USER_SIGNOFF         210
  607. #define MSG_CLIENT_BROWSE               211
  608. #define MSG_SERVER_BROWSE_RESPONSE      212
  609. #define MSG_SERVER_BROWSE_END           213
  610. #define MSG_SERVER_STATS                214
  611. #define MSG_CLIENT_RESUME_REQUEST       215
  612. #define MSG_SERVER_RESUME_MATCH         216
  613. #define MSG_SERVER_RESUME_MATCH_END     217
  614. #define MSG_CLIENT_DOWNLOAD_START       218
  615. #define MSG_CLIENT_DOWNLOAD_END         219
  616. #define MSG_CLIENT_UPLOAD_START         220
  617. #define MSG_CLIENT_UPLOAD_END           221
  618. #define MSG_CLIENT_CHECK_PORT           300
  619. #define MSG_SERVER_HOTLIST_ACK          301
  620. #define MSG_SERVER_HOTLIST_ERROR        302
  621. #define MSG_CLIENT_REMOVE_HOTLIST       303
  622. #define MSG_SERVER_DISCONNECTING        316
  623. #define MSG_CLIENT_IGNORE_LIST          320
  624. #define MSG_SERVER_IGNORE_ENTRY         321
  625. #define MSG_CLIENT_IGNORE_USER          322
  626. #define MSG_CLIENT_UNIGNORE_USER        323
  627. #define MSG_SERVER_NOT_IGNORED          324
  628. #define MSG_SERVER_ALREADY_IGNORED      325
  629. #define MSG_CLIENT_CLEAR_IGNORE         326
  630. #define MSG_CLIENT_JOIN                 400
  631. #define MSG_CLIENT_PART                 401
  632. #define MSG_CLIENT_PUBLIC               402
  633. #define MSG_SERVER_PUBLIC               403
  634. #define MSG_SERVER_NOSUCH               404
  635. #define MSG_SERVER_JOIN_ACK             405
  636. #define MSG_SERVER_JOIN                 406
  637. #define MSG_SERVER_PART                 407
  638. #define MSG_SERVER_CHANNEL_USER_LIST    408     /* list of users in a channel */
  639. #define MSG_SERVER_CHANNEL_USER_LIST_END        409
  640. #define MSG_SERVER_TOPIC                410     /* server and client */
  641. #define MSG_CLIENT_CHANNEL_BAN_LIST     420
  642. #define MSG_SERVER_CHANNEL_BAN_LIST     421
  643. #define MSG_CLIENT_CHANNEL_BAN          422
  644. #define MSG_CLIENT_CHANNEL_UNBAN        423
  645. #define MSG_CLIENT_CHANNEL_CLEAR_BANS   424
  646. #define MSG_CLIENT_DOWNLOAD_FIREWALL    500
  647. #define MSG_SERVER_UPLOAD_FIREWALL      501
  648. #define MSG_CLIENT_USERSPEED            600
  649. #define MSG_SERVER_USER_SPEED           601
  650. #define MSG_CLIENT_WHOIS                603     /* whois query */
  651. #define MSG_SERVER_WHOIS_RESPONSE       604
  652. #define MSG_SERVER_WHOWAS               605
  653. #define MSG_CLIENT_SETUSERLEVEL         606
  654. #define MSG_SERVER_UPLOAD_REQUEST       607
  655. #define MSG_CLIENT_UPLOAD_OK            608
  656. #define MSG_CLIENT_KILL                 610
  657. #define MSG_CLIENT_NUKE                 611
  658. #define MSG_CLIENT_BAN                  612
  659. #define MSG_CLIENT_ALTER_PORT           613
  660. #define MSG_CLIENT_UNBAN                614
  661. #define MSG_CLIENT_BANLIST              615
  662. #define MSG_SERVER_IP_BANLIST           616
  663. #define MSG_CLIENT_LIST_CHANNELS        617
  664. #define MSG_SERVER_CHANNEL_LIST_END     617
  665. #define MSG_SERVER_CHANNEL_LIST         618
  666. #define MSG_CLIENT_LIMIT                619
  667. #define MSG_SERVER_LIMIT                620
  668. #define MSG_CLIENT_MOTD                 621     /* client request for motd */
  669. #define MSG_SERVER_MOTD                 621
  670. #define MSG_CLIENT_MUZZLE               622
  671. #define MSG_CLIENT_UNMUZZLE             623
  672. #define MSG_CLIENT_UNNUKE               624
  673. #define MSG_CLIENT_ALTER_SPEED          625
  674. #define MSG_CLIENT_DATA_PORT_ERROR      626
  675. #define MSG_SERVER_DATA_PORT_ERROR      626     /* same as client message */
  676. #define MSG_CLIENT_WALLOP               627
  677. #define MSG_SERVER_WALLOP               627     /* same as client message */
  678. #define MSG_CLIENT_ANNOUNCE             628
  679. #define MSG_SERVER_ANNOUNCE             628     /* same as client message */
  680. #define MSG_SERVER_NICK_BANLIST         629
  681. #define MSG_CLIENT_BROWSE_DIRECT        640
  682. #define MSG_SERVER_BROWSE_DIRECT_OK     641
  683. #define MSG_SERVER_BROWSE_DIRECT_ERR    642
  684. #define MSG_CLIENT_CLOAK                652
  685. #define MSG_CLIENT_CHANGE_SPEED         700
  686. #define MSG_CLIENT_CHANGE_PASS          701
  687. #define MSG_CLIENT_CHANGE_EMAIL         702
  688. #define MSG_CLIENT_CHANGE_DATA_PORT     703
  689. #define MSG_SERVER_GHOST                748
  690. #define MSG_CLIENT_PING_SERVER          750
  691. #define MSG_CLIENT_PING                 751
  692. #define MSG_SERVER_PING                 751
  693. #define MSG_CLIENT_PONG                 752
  694. #define MSG_SERVER_PONG                 752
  695. #define MSG_CLIENT_ALTER_PASS           753     /* admin pass change */
  696. #define MSG_CLIENT_SERVER_RECONFIG      800
  697. #define MSG_CLIENT_SERVER_VERSION       801
  698. #define MSG_CLIENT_SERVER_CONFIG        810
  699. #define MSG_CLIENT_CLEAR_CHANNEL        820
  700. #define MSG_CLIENT_REDIRECT             821
  701. #define MSG_CLIENT_CYCLE                822
  702. #define MSG_CLIENT_SET_CHAN_LEVEL       823
  703. #define MSG_CLIENT_EMOTE                824
  704. #define MSG_SERVER_NAMES_LIST           825
  705. #define MSG_CLIENT_CHANNEL_LIMIT        826
  706. #define MSG_CLIENT_FULL_CHANNEL_LIST    827
  707. #define MSG_SERVER_FULL_CHANNEL_INFO    828
  708. #define MSG_CLIENT_KICK                 829
  709. #define MSG_SERVER_NAMES_LIST_END       830
  710. #define MSG_CLIENT_NAMES_LIST           830
  711. #define MSG_CLIENT_GLOBAL_USER_LIST     831
  712. #define MSG_SERVER_GLOBAL_USER_LIST     832
  713. #define MSG_CLIENT_ADD_DIRECTORY        870
  714.  
  715. /* non-standard message unique to this server */
  716. #define MSG_CLIENT_QUIT                 10000   /* user has quit */
  717. #define MSG_SERVER_LOGIN                10010   /* server login request */
  718. #define MSG_SERVER_LOGIN_ACK            10011   /* server login response */
  719. #define MSG_SERVER_USER_SHARING         10012
  720. #define MSG_SERVER_USER_IP              10013   /* deprecated, ip for user */
  721. #define MSG_SERVER_REGINFO              10014   /* registration info */
  722. #define MSG_SERVER_REMOTE_SEARCH        10015
  723. #define MSG_SERVER_REMOTE_SEARCH_RESULT 10016
  724. #define MSG_SERVER_REMOTE_SEARCH_END    10017
  725. #define MSG_SERVER_ENCAPSULATED         10018
  726. #define MSG_SERVER_LINK_INFO            10019
  727. #define MSG_SERVER_QUIT                 10020
  728. #define MSG_SERVER_NOTIFY_MODS          10021
  729. #define MSG_SERVER_SERVER_PONG          10022   /* server->server pong */
  730. #define MSG_SERVER_TIME_CHECK           10023   /* server time check */
  731. #define MSG_SERVER_WHOIS_NOTIFY         10024
  732. #define MSG_CLIENT_CONNECT              10100
  733. #define MSG_CLIENT_DISCONNECT           10101
  734. #define MSG_CLIENT_KILL_SERVER          10110
  735. #define MSG_CLIENT_REMOVE_SERVER        10111
  736. #define MSG_CLIENT_LINKS                10112
  737. #define MSG_SERVER_LINKS                10112
  738. #define MSG_CLIENT_USAGE_STATS          10115   /* server usage stats */
  739. #define MSG_SERVER_USAGE_STATS          10115
  740. #define MSG_CLIENT_REHASH               10117   /* reload config file */
  741. #define MSG_CLIENT_VERSION_STATS        10118   /* client version stats */
  742. #define MSG_CLIENT_WHICH_SERVER         10119   /* which server a user is on */
  743. #define MSG_CLIENT_PING_ALL_SERVERS     10120
  744. #define MSG_CLIENT_WHO_WAS              10121
  745. #define MSG_CLIENT_MASS_KILL            10122
  746. #define MSG_CLIENT_HISTOGRAM            10123
  747. #define MSG_SERVER_HISTOGRAM            10124
  748. #define MSG_CLIENT_REGISTER_USER        10200
  749. #define MSG_CLIENT_CHANNEL_LEVEL        10201   /* deprecated, use 823 instead */
  750. #define MSG_CLIENT_KICK_USER            10202   /* deprecated, use 829 instead */
  751. #define MSG_CLIENT_USER_MODE            10203   /* set a user mode */
  752. #define MSG_SERVER_USER_MODE            10203
  753. #define MSG_CLIENT_OP                   10204
  754. #define MSG_CLIENT_DEOP                 10205
  755. #define MSG_CLIENT_OP_LIST              10206
  756. #define MSG_CLIENT_DROP_CHANNEL         10207
  757. #define MSG_CLIENT_CHANNEL_WALLOP       10208
  758. #define MSG_CLIENT_CHANNEL_MODE         10209
  759. #define MSG_CLIENT_CHANNEL_INVITE       10210
  760. #define MSG_CLIENT_CHANNEL_VOICE        10211
  761. #define MSG_CLIENT_CHANNEL_UNVOICE      10212
  762. #define MSG_CLIENT_CHANNEL_MUZZLE       10213
  763. #define MSG_CLIENT_CHANNEL_UNMUZZLE     10214
  764. #define MSG_CLIENT_CLASS_ADD            10250
  765. #define MSG_CLIENT_CLASS_DEL            10251
  766. #define MSG_CLIENT_CLASS_LIST           10252
  767. #define MSG_CLIENT_DLINE_ADD            10253
  768. #define MSG_CLIENT_DLINE_DEL            10254
  769. #define MSG_CLIENT_DLINE_LIST           10255
  770. #define MSG_CLIENT_ILINE_ADD            10256
  771. #define MSG_CLIENT_ILINE_DEL            10257
  772. #define MSG_CLIENT_ILINE_LIST           10258
  773. #define MSG_CLIENT_ELINE_ADD            10259
  774. #define MSG_CLIENT_ELINE_DEL            10260
  775. #define MSG_CLIENT_ELINE_LIST           10261
  776.  
  777. #define MSG_CLIENT_SHARE_FILE           10300   /* generic media type */
  778. #define MSG_CLIENT_BROWSE_NEW           10301
  779. #define MSG_SERVER_BROWSE_RESULT_NEW    10302
  780.  
  781. /* utility routines */
  782.  
  783. #if HAVE_POLL
  784. void    remove_fd (int fd);
  785. #endif
  786.  
  787. int     acl_connection_allowed (unsigned int);
  788. void    acl_init (void);
  789. void    acl_destroy (void);
  790. void    acl_save (void);
  791. void    acl_sync (CONNECTION *);
  792. int     add_client (CONNECTION *, int is_server);
  793. void    add_fd (int fd);
  794. int     add_timer (int, int, timer_cb_t, void *);
  795. char   *append_string (char *in, const char *fmt, ...);
  796. void    auto_link (void);
  797. int     bind_interface (int, unsigned int, int);
  798. BUFFER *buffer_append (BUFFER *, BUFFER *);
  799. BUFFER *buffer_consume (BUFFER *, int);
  800. void    buffer_free (BUFFER *);
  801. int     buffer_size (BUFFER *);
  802. int     buffer_decompress (BUFFER *, z_streamp, char *, int);
  803. int     buffer_validate (BUFFER *);
  804. void    cancel_search (CONNECTION * con);
  805. int     check_ban (CONNECTION *, const char *, const char *);
  806. int     check_class (CONNECTION *, ip_info_t *);
  807. int     check_connect_status (int);
  808. int     check_pass (const char *info, const char *pass);
  809. void    cleanup_ip_info (void);
  810. void    clear_read (int);
  811. void    clear_write (int);
  812. void    close_db (void);
  813. void    complete_connect (CONNECTION * con);
  814. int     config (int);
  815. void    config_defaults (void);
  816. USERDB *create_db (USER *);
  817. void    destroy_connection (CONNECTION *);
  818. void    dump_channels (void);
  819. void    exec_timers (time_t);
  820. void    expand_hex (char *, int);
  821. void    expire_bans (void);
  822. void    expire_searches (void);
  823. void    expire_whowas (void);
  824. void    finalize_compress (SERVER *);
  825. CHANNEL *find_channel (LIST *, const char *);
  826. CHANUSER *find_chanuser (LIST *, USER *);
  827. server_auth_t *find_server_auth (const char *);
  828. int     form_message (char *, int, int, const char *, ...);
  829. void    free_ban (BAN *);
  830. void    free_channel (CHANNEL *);
  831. void    free_config (void);
  832. void    free_datum (DATUM *);
  833. void    free_pointer (void *);
  834. void    free_server_auth (server_auth_t *);
  835. void    free_timers (void);
  836. void    free_user (USER *);
  837. void    free_whowas (whowas_t *);
  838. char   *generate_nonce (void);
  839. char   *generate_pass (const char *pass);
  840. int     get_level (const char *);
  841. unsigned short get_local_port (int);
  842. void    get_random_bytes (char *d, int);
  843. int     glob_match (const char *, const char *);
  844. void    handle_connection (CONNECTION *);
  845. void    init_compress (CONNECTION *, int);
  846. int     init_db (void);
  847. void    init_random (void);
  848. int     init_server (void);
  849. int     invalid_channel (const char *);
  850. void    invalid_channel_msg (CONNECTION *);
  851. int     invalid_host (const char *);
  852. int     invalid_nick (const char *);
  853. void    invalid_nick_msg (CONNECTION *);
  854. void    ip_info_free (ip_info_t *);
  855. int     is_address (char *, unsigned int *, unsigned int *);
  856. int     is_blocked (char *);
  857. int     is_chanop (CHANNEL *, USER *);
  858. int     is_filtered (char *);
  859. int     is_ignoring (LIST *, const char *);
  860. int     is_linked (const char *);
  861. int     is_server (const char *);
  862. void    kill_user_internal (CONNECTION *, USER *, const char *, USER *,
  863.                             const char *, ...);
  864. void    lag_detect (void *);
  865. int     load_bans (void);
  866. void    load_block (void);
  867. void    load_channels (void);
  868. int     load_class (void);
  869. void    load_filter (void);
  870. void    load_server_auth (void);
  871. void    log (const char *fmt, ...);
  872. unsigned int lookup_ip (const char *host);
  873. int     make_tcp_connection (const char *host, int port, unsigned int *ip);
  874. void    motd_init (void);
  875. void    motd_close (void);
  876. char   *my_ntoa (unsigned int);
  877. CHANNEL *new_channel (void);
  878. CONNECTION *new_connection (void);
  879. int     new_tcp_socket (int);
  880. char   *next_arg (char **);
  881. char   *next_arg_noskip (char **);
  882. time_t  next_timer (void);
  883. char   *normalize_ban (char *, char *, int);
  884. void    nosuchuser (CONNECTION *);
  885. void    nosuchchannel (CONNECTION *);
  886. void    notify_mods (unsigned int, const char *, ...);
  887. void    notify_ops (CHANNEL *, const char *, ...);
  888. void    part_channel (CHANNEL *, USER *);
  889. void    pass_message (CONNECTION *, char *, size_t);
  890. void    pass_message_args (CONNECTION * con, unsigned int msgtype,
  891.                            const char *fmt, ...);
  892. void    permission_denied (CONNECTION * con);
  893. int     pop_user (CONNECTION * con, char **pkt, USER ** user);
  894. int     pop_user_server (CONNECTION * con, int tag, char **pkt, char **nick,
  895.                          USER ** user);
  896. void    print_args (int, char **);
  897. void    queue_data (CONNECTION *, char *, int);
  898. void    remove_connection (CONNECTION *);
  899. void    remove_links (const char *);
  900. void    remove_user (CONNECTION *);
  901. int     safe_realloc (void **, int);
  902. int     save_bans (void);
  903. int     save_class (void);
  904. void    send_all_clients (int, const char *, ...);
  905. void    send_cmd (CONNECTION *, unsigned int msgtype, const char *fmt, ...);
  906. void    send_cmd_pre (CONNECTION *, unsigned int msgtype, const char *pre,
  907.                       const char *fmt, ...);
  908. int     send_queued_data (CONNECTION * con);
  909. int     send_to_channel (char *, char *, int);
  910. void    send_user (USER *, int, char *fmt, ...);
  911. int     set_keepalive (int, int);
  912. int     set_data_size (int);
  913. void    set_fd (int, int);
  914. int     set_max_connections (int);
  915. int     set_nonblocking (int);
  916. void    set_read (int);
  917. int     set_rss_size (int);
  918. int     set_tcp_buffer_len (int, int);
  919. void    set_write (int);
  920. int     split_line (char **template, int templatecount, char *pkt);
  921. void    stat_server_push (void);
  922. void    stat_server_read (void);
  923. char   *strfcpy (char *, const char *, size_t);
  924. char   *strlower (char *);
  925. void    sync_channel_bans (CONNECTION *, CHANNEL *);
  926. void    sync_channel_user (CONNECTION *, CHANNEL *, CHANUSER *);
  927. void    synch_server (CONNECTION *);
  928. void    timer_set_interval (unsigned int, int);
  929. LIST   *tokenize (char *, LIST **);
  930. void    truncate_reason (char *);
  931. void    unparsable (CONNECTION *);
  932. int     userdb_dump (void);
  933. int     userdb_init (void);
  934. void    userdb_free (USERDB *);
  935. void    logmode_change (char *, char *, int, int);
  936. unsigned int set_usermode (char *, unsigned int);
  937. void    config_user_level (char *);
  938.  
  939. #if DEBUG
  940. int     validate_user (USER *);
  941. int     validate_channel (CHANNEL *);
  942. int     validate_connection (CONNECTION *);
  943. int     validate_flist (FLIST *);
  944. #endif
  945.  
  946. #define HANDLER(f) void f (CONNECTION *con, unsigned short tag, u_short len, char *pkt)
  947. /* this is not a real handler, but has the same arguments as one */
  948. HANDLER (dispatch_command);
  949.  
  950. /* protocol handlers */
  951. HANDLER (add_class);
  952. HANDLER (add_file);
  953. HANDLER (add_directory);
  954. HANDLER (add_hotlist);
  955. HANDLER (alter_pass);
  956. HANDLER (alter_port);
  957. HANDLER (alter_speed);
  958. HANDLER (announce);
  959. HANDLER (ban);
  960. HANDLER (banlist);
  961. HANDLER (browse);
  962. HANDLER (browse_direct);
  963. HANDLER (browse_direct_ok);
  964. HANDLER (browse_new);
  965. HANDLER (change_data_port);
  966. HANDLER (change_email);
  967. HANDLER (change_speed);
  968. HANDLER (change_pass);
  969. HANDLER (channel_ban);
  970. HANDLER (channel_banlist);
  971. HANDLER (channel_clear_bans);
  972. HANDLER (channel_invite);
  973. HANDLER (channel_level);
  974. HANDLER (channel_limit);
  975. HANDLER (channel_mode);
  976. HANDLER (channel_muzzle);
  977. HANDLER (channel_op);
  978. HANDLER (channel_unban);
  979. HANDLER (channel_wallop);
  980. HANDLER (check_password);
  981. HANDLER (class_list);
  982. HANDLER (clear_channel);
  983. HANDLER (clear_ignore);
  984. HANDLER (client_quit);
  985. HANDLER (client_version_stats);
  986. HANDLER (cloak);
  987. HANDLER (cycle_client);
  988. HANDLER (data_port_error);
  989. HANDLER (download);
  990. HANDLER (download_end);
  991. HANDLER (download_start);
  992. HANDLER (emote);
  993. HANDLER (encapsulated);
  994. HANDLER (full_channel_list);
  995. HANDLER (generic_acl_add);
  996. HANDLER (generic_acl_del);
  997. HANDLER (generic_acl_list);
  998. HANDLER (global_user_list);
  999. HANDLER (ignore);
  1000. HANDLER (ignore_command);
  1001. HANDLER (ignore_list);
  1002. HANDLER (join);
  1003. HANDLER (kick);
  1004. HANDLER (kill_user);
  1005. HANDLER (kill_server);
  1006. HANDLER (level);
  1007. HANDLER (link_info);
  1008. HANDLER (list_channels);
  1009. HANDLER (list_users);
  1010. HANDLER (login);
  1011. HANDLER (mass_kill);
  1012. HANDLER (muzzle);
  1013. HANDLER (nuke);
  1014. HANDLER (part);
  1015. HANDLER (ping);
  1016. HANDLER (ping_all_servers);
  1017. HANDLER (ping_server);
  1018. HANDLER (privmsg);
  1019. HANDLER (public);
  1020. HANDLER (queue_limit);
  1021. HANDLER (redirect_client);
  1022. HANDLER (reginfo);
  1023. HANDLER (register_nick);
  1024. HANDLER (register_user);
  1025. HANDLER (rehash);
  1026. HANDLER (remote_notify_mods);
  1027. HANDLER (remote_search);
  1028. HANDLER (remote_search_result);
  1029. HANDLER (remote_search_end);
  1030. HANDLER (remove_file);
  1031. HANDLER (remove_hotlist);
  1032. HANDLER (remove_server);
  1033. HANDLER (resume);
  1034. HANDLER (search);
  1035. HANDLER (server_config);
  1036. HANDLER (server_connect);
  1037. HANDLER (server_disconnect);
  1038. HANDLER (server_error);
  1039. HANDLER (server_links);
  1040. HANDLER (server_login);
  1041. HANDLER (server_login_ack);
  1042. HANDLER (server_pong);
  1043. HANDLER (server_reconfig);
  1044. HANDLER (server_stats);
  1045. HANDLER (server_usage);
  1046. HANDLER (server_version);
  1047. HANDLER (share_file);
  1048. HANDLER (show_motd);
  1049. HANDLER (upload_ok);
  1050. HANDLER (upload_start);
  1051. HANDLER (upload_end);
  1052. HANDLER (time_check);
  1053. HANDLER (topic);
  1054. HANDLER (unban);
  1055. HANDLER (unignore);
  1056. HANDLER (unnuke);
  1057. HANDLER (unshare_all);
  1058. HANDLER (upload_request);
  1059. HANDLER (user_ip);
  1060. HANDLER (user_sharing);
  1061. HANDLER (user_speed);
  1062. HANDLER (wallop);
  1063. HANDLER (whois);
  1064. HANDLER (user_mode_cmd);
  1065. HANDLER (which_server);
  1066. HANDLER (who_was);
  1067. HANDLER (whois_notify);
  1068.  
  1069. #define CHECK_USER_CLASS(f) if (con->class != CLASS_USER) { log ("%s: not USER class", f); return; }
  1070. #define CHECK_SERVER_CLASS(f) if(con->class != CLASS_SERVER) { log ("%s: not SERVER class", f); return; }
  1071.  
  1072. #define NONULL(p) (p!=0?p:"")
  1073.  
  1074. #ifndef HAVE_SOCKLEN_T
  1075. #ifdef __sun__
  1076. /* solaris 2.6 uses a signed int for the 4th arg to accept() */
  1077. typedef int socklen_t;
  1078. #else
  1079. typedef unsigned int socklen_t;
  1080. #endif
  1081. #endif
  1082.  
  1083. #ifdef __sun__
  1084. #define SOCKOPTCAST (char*)
  1085. #else
  1086. #define SOCKOPTCAST
  1087. #endif /* __sun__ */
  1088.  
  1089. /*
  1090. ** Macros to use to aid in porting code to Win32
  1091. */
  1092. #if !defined(WIN32) || defined(__CYGWIN__)
  1093. #define READ read
  1094. #define WRITE write
  1095. #define CLOSE close
  1096. /* use N_ERRNO instead of `errno' when checking the error code for network
  1097.    related functions */
  1098. #define N_ERRNO errno
  1099. /* log message for errors with socket related system calls */
  1100. #define nlogerr logerr
  1101. #else
  1102. #define READ(a,b,c) recv(a,b,c,0)
  1103. #define WRITE(a,b,c) send(a,b,c,0)
  1104. #define CLOSE closesocket
  1105. #undef SOCKOPTCAST
  1106. #define SOCKOPTCAST (char*)
  1107. #define EINPROGRESS WSAEINPROGRESS
  1108. #define EWOULDBLOCK WSAEWOULDBLOCK
  1109. #define _POSIX_PATH_MAX 256
  1110. /* winsock uses h_errno so we have to wrap the test for it here */
  1111. #define N_ERRNO h_errno
  1112. #define nlogerr(f,s) _logerr(f,s,h_errno)
  1113.  
  1114. #define SHAREDIR "//c/opennap"
  1115. #define PACKAGE "opennap"
  1116. #define VERSION "0.40"
  1117.  
  1118. #define strcasecmp stricmp
  1119. #define strncasecmp strnicmp
  1120. #define vsnprintf _vsnprintf
  1121. #define snprintf _snprintf
  1122. #define getuid() 0              /* just fake it */
  1123. #define getpid() 0              /* just fake it */
  1124.  
  1125. extern int _getopt (int, char **, char *);
  1126.  
  1127. #define getopt _getopt
  1128.  
  1129. extern char *optarg;
  1130. extern int optind;
  1131.  
  1132. #endif /* !WIN32 */
  1133.  
  1134. #define ERROR_MODE      (1<<0)
  1135. #define BANLOG_MODE     (1<<1)
  1136. #define CHANGELOG_MODE  (1<<2)
  1137. #define KILLLOG_MODE    (1<<3)
  1138. #define LEVELLOG_MODE   (1<<4)
  1139. #define SERVERLOG_MODE  (1<<5)
  1140. #define MUZZLELOG_MODE  (1<<6)
  1141. #define PORTLOG_MODE    (1<<7)
  1142. #define WALLOPLOG_MODE  (1<<8)
  1143. #define CLOAKLOG_MODE   (1<<9)
  1144. #define FLOODLOG_MODE   (1<<10)
  1145. #define PINGLOG_MODE    (1<<11)
  1146. #define MSGLOG_MODE     (1<<12)
  1147. #define WHOISLOG_MODE   (1<<13)
  1148.  
  1149. #define LOGALL_MODE (ERROR_MODE|BANLOG_MODE|CHANGELOG_MODE|\
  1150.         KILLLOG_MODE|LEVELLOG_MODE|SERVERLOG_MODE|MUZZLELOG_MODE|PORTLOG_MODE|\
  1151.         WALLOPLOG_MODE|CLOAKLOG_MODE|FLOODLOG_MODE|PINGLOG_MODE|MSGLOG_MODE|\
  1152.         WHOISLOG_MODE)
  1153.  
  1154. #endif /* opennap_h */
  1155.